import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 故我
 * Date: 2023-03-17
 * Time: 22:39
 */
public class Test2 {
    public static int facN(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * facN(n - 1);
        }
    }

    public static void main(String[] args) {
        // 递归求 N 的阶乘
        Scanner scanner = new Scanner(System.in);
        System.out.println(facN(scanner.nextInt()));
    }

    public static int sumAdd(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + sumAdd(n - 1);
        }
    }

    public static void main8(String[] args) {
        // 递归求 1 + 2 + 3 + ... + 10
        System.out.println(sumAdd(10));
    }

    public static void printOne(int n) {
        if (n < 10) {
            System.out.print(n + " ");
        } else {
            printOne(n / 10);
            System.out.print(n % 10 + " ");
        }
    }

    public static void main7(String[] args) {
        // 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)    （递归）
        Scanner scanner = new Scanner(System.in);
        printOne(scanner.nextInt());
    }

    public static int facSum(int n) {
        if (n < 10) {
            return n;
        } else {
            return facSum(n / 10) + n % 10;
        }
    }

    public static void main6(String[] args) {
        // 写一个递归方法，输入一个非负整数，返回组成它的数字之和
        Scanner scanner = new Scanner(System.in);
        System.out.println(facSum(scanner.nextInt()));
    }

    public static int fac(int N) {
        if (N == 1 || N == 2) {
            return 1;
        } else {
            return fac(N - 1) + fac(N - 2);
        }
    }

    public static void main5(String[] args) {
        // 递归求斐波拉契第 N 项的值
        Scanner scanner = new Scanner(System.in);
        System.out.println(fac(scanner.nextInt()));
    }

    public static void move(char pos1, char pos2) {
        System.out.print(pos1 + "->" + pos2 + " ");
    }

    public static void Hanluo(int n, char pos1, char pos2, char pos3) {
        /**
         * pos1: 起始位置
         * pos2: 中间位置
         * pos3: 终点位置
         */
        if (n == 1) {
            move(pos1, pos3);
        } else {
            Hanluo(n - 1, pos1, pos3, pos2);
            move(pos1, pos3);
            Hanluo(n - 1, pos2, pos1, pos3);
        }
    }

    public static void main4(String[] args) {
        // 汉诺塔问题
        char pos1 = 'A';
        char pos2 = 'B';
        char pos3 = 'C';
        Hanluo(3, pos1, pos2, pos3);
    }

    public static int forgJump(int n) {
        if (n == 1 || n == 2) {
            return n;
        } else {
            return forgJump(n - 1) + forgJump(n - 2);
        }
    }

    public static void main3(String[] args) {
        // 青蛙跳台阶问题 - 采用递归的方法
        Scanner scanner = new Scanner(System.in);
        System.out.println(forgJump(scanner.nextInt()));
    }

    public static int sumAdd(int a, int b) {
        return a + b;
    }

    public static float sumAdd(float f1, float f2, float f3) {
        return f1 + f2 + f3;
    }

    public static void main2(String[] args) {
        // 在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
        int a = 10;
        int b = 20;
        float f1 = 1.2f;
        float f2 = 1.3f;
        float f3 = 3.4f;
        System.out.println(sumAdd(a, b));
        System.out.println(sumAdd(f1, f2, f3));

    }

    public static int maxTwo(int a, int b) {
        return a > b ? a : b;
    }

    public static float maxTwo(float a, float b) {
        return a > b ? a : b;
    }

    public static float maxThree(float a, float b, float c) {
        return maxTwo(maxTwo(a, b), c);
    }

    public static void main1(String[] args) {
        // 在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
        int a = 10;
        int b = 20;
        float f1 = 1.29f;
        float f2 = 30.5f;
        float f3 = 2145.7f;
        System.out.println(maxTwo(a, b));
        System.out.println(maxThree(f1, f2, f3));
    }
}
